"""
题目：实现一个函数，功能类似于列表的切片操作 lst [start:end:step]。

"""


def custom_slice(lst, start=0, end=None, step=1):
    # 开头处理默认值 保证各项参数合法合理
    if end is None:
        #end如果为空，则默认赋值为集合大小
        end = len(lst)
    # 处理负索引
    if start < 0:
        start += len(lst)
    if end < 0:
        end += len(lst)
    # 确保索引在有效范围内 进一步保证程序不会报错
    start = max(0, min(start, len(lst)))
    end = max(0, min(end, len(lst)))
    # 初始化结果列表
    result = []
    # 根据步长方向处理
    if step > 0:
        i = start
        #因为无论怎么样，都不能包含end,所以是小于号 不是小于等于
        while i < end:
            result.append(lst[i])
            i += step
    elif step < 0:
        i = start
        #这里是>end来比较 依然不能取等号
        while i > end:
            result.append(lst[i])
            i += step  # 步长为负，实际是减去步长的绝对值  i=i+step step为负数 所以 是减去
    return result


# 测试
print(custom_slice([1, 2, 3, 4, 5], 1, 4, 1))  # 输出: [2, 3, 4]
print(custom_slice([1, 2, 3, 4, 5], 4, 0, -1))  # 输出: [5, 4, 3, 2]


print([1,2,3,4,5][1:2:1])
